﻿// 5088. Max-K子序列的最大元素和.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <deque>


using namespace std;
/*
https://www.acwing.com/problem/content/5091/


给定一个圆序列 a1,a2,…,aN。

圆序列指 a1 的左邻居是 aN，aN 的右邻居是 a1。

你的任务是计算 Max−K子序列的最大元素和。

Max−K 子序列是指长度不超过 K 的连续非空子序列。

输入格式
第一行包含整数 T，表示共有 T 组测试数据。

每组数据第一行包含两个整数 N,K。

第二行包含 N 个整数 a1,a2,…,aN。

输出格式
每组数据输出一行结果，三个整数，分别表示子序列的最大元素和，子序列的起始元素下标，子序列的末尾元素下标。

如果满足条件的子序列不唯一，则优先选择起始元素下标最小的那个，如果满足条件的起始元素下标最小的子序列不唯一，则优先选择其中长度最短的那个。

数据范围
1≤T≤100
,
1≤N≤105
,
1≤K≤N
,
−1000≤ai≤1000
输入样例：
4
6 3
6 -1 2 -6 5 -5
6 4
6 -1 2 -6 5 -5
6 3
-1 2 -6 5 -5 6
6 6
-1 -1 -1 -1 -1 -1
输出样例：
7 1 3
7 1 3
7 6 2
-1 1 1

2
10 5
-7 4 -4 6 -6 8 -1 6 -10 0

13 4 8

2
10 8
0 4 6 6 -3 3 10 -2 -8 -5

26 1 7

2
10 7
0 0 -2 -8 0 -1 -8 0 -1 -8
0 2 2

*/

const int N = 200010;
int arr[N];
int pre[N];
int t, n, k;

int q[N]; int tt, hh;


bool isEmpty() {
	return hh >= tt;
}

int getFront() {
	return q[hh];
}

int getBack() {
	return q[tt-1];
}

void pop_front() {
	hh++;
}

void pop_back() {
	tt--;
}

void push_back(int x) {
	q[tt] = x; tt++;
}

void solve() {
	tt = 0; hh = 0;
	int maxv = -2000; int ansl = 200010; int ansr = 0;
	for (int i = 0; i <= 2 * n; i++) {
		while (!isEmpty() && i - getFront() > k) pop_front();

		if (!isEmpty() && pre[i] - pre[getFront()] > maxv) {
			maxv = pre[i] - pre[getFront()];
			ansl = getFront() + 1; ansr = i;

		}
		else if (!isEmpty() && pre[i] - pre[getFront()] == maxv) {
			int l = getFront() + 1; int r = i;
			if (pre[i] - pre[getFront()] == maxv && l <= ansl) {
				ansl = l;
			}
			else if (pre[i] - pre[getFront()] == maxv && l == ansl) {
				if (l == ansl && r - l < ansr - ansl) {
					ansl = l; ansr = r;
				}
			}
		}
		while (!isEmpty() && pre[i] < pre[getBack()]) pop_back();
		push_back(i);
	}

	//cout << maxv << " " << (ansl -1)% n + 1 << " " << (ansr-1) % n + 1 << endl;
	printf("%d %d %d\n", maxv, (ansl - 1) % n + 1, (ansr - 1) % n + 1);
}


int main()
{
	//cin >> t;
	scanf("%d", &t);
	while (t--) {
		//cin >> n >> k;
		scanf("%d%d", &n, &k);
		for (int i = 1; i <= n; i++) {
			//cin >> arr[i];
			scanf("%d", &arr[i]);
			arr[i + n] = arr[i];
		}
		for (int i = 1; i <= 2 * n; i++) {
			pre[i] = pre[i - 1] + arr[i];
		}
		solve();
	}


	return 0;
}

